// 知识点1：对于接受类类型实参的函数，其名字查找将在实参类所属命名空间进行，这对我们如何确定候选函数集造成了影响

// 知识点2：using声明语句声明的是一个名字，而非一个特定的函数，所以 Using
// NS::print(int)将是错误的，我们会将print函数的所有版本引入到该空间，若本空间已有同名函数，则using声明会引发错误

// 知识点3：using指示将命名空间的成员提升到外层作用域中，若两空间有同名函数，则会被添加到重载集合中，且引入一个与已有函数形参列表完全相同的函数不会造成错误，只要我们指明使用哪个版本的函数即可

// 知识点4：一个using声明引入的函数将重载该声明语句所属作用域中已有的同名函数，如果using声明出现在局部作用域中，则引入的名字会隐藏外层作用域中的相关声明
namespace p {
void compute();             //不可行
void compute(const void*);  //可行,0->NULL
}  // namespace p
using p::compute;
void compute(int);                   //可行,最佳匹配
void compute(double, double = 1.1);  //可行,int->double
void compute(char*, char* = 0);      //可行,0->NULL

void f() {
  compute(0);  //与compute(int)版本最佳匹配
}